Alocação de Memória
A memória geralmente é dividida em duas partes, uma para o sistema operacional e outra para os processos de usuário. Geralmente a memória baixa é destinada ao Sistema operacional, onde também é colocado o vetor de interrupções. Ambas as áreas de memória são protegidas, para evitar a intervenção de uma área em outra, e de processos em áreas destinadas a processos diferentes.
Para controlar esta questão de acesso indevido a áreas de memória, temos um registrador de limite que define até onde vai a área destinada a um processo e um registrador de relocação que define onde começa a área destinada a aquele processo, tudo isso podendo ser modificado dinamicamente.
Figura - endereçamento em memória (tradução do endereço lógico para o endereço físico)
O sistema operacional guarda uma tabela indicando as partes livres da memória e as partes ocupadas. Quando um processo novo chega, somente a área necessária é destinada a ele. A medida que as áreas de memória são destinadas ao processo, o que resta é devolvido a parte de blocos livres na memória. Existem 3 tipos de algoritmos para solucionar os problemas adjacentes a alocação:
First-Fit: aloca o primeiro bloco de memória grande o suficiente.
Best-fit: aloca o menor bloco de memória que suporte o processo.
Worst-Fit: aloca o bloco de memória maior para o processo que chegar.
Teoricamente a First-Fit é a mais rápida, a Best-Fit também tem desempenho similar a ela. Já Worst-Fit é a pior em desempenho e velocidade.
Também é um fato bastante importante quando se fala em alocação de memória as fragmentações existentes, tanto externa quanto interna. A fragmentação Externa ocorre quando os blocos na memória são divididos em pequenas partes, e isso ocasiona a possibilidade de termos espaço para receber os dados de um processo, mas esse não é contínuo.
Já a fragmentação interna ocorre quando a memória alocada para um processo e maior do que ele. Para estas situações são implementadas soluções de compactação para aumentar o rendimento.